// 数据模型

/**
 * 场地数据模型
 */
export class Venue {
  constructor(data = {}) {
    this.id = data.id || 0;
    this.name = data.name || '';
    this.address = data.address || '';
    this.latitude = data.latitude || 0;
    this.longitude = data.longitude || 0;
    this.phone = data.phone || '';
    this.rating = data.rating || 0;
    this.price = data.price || 0;
    this.facilities = data.facilities || [];
    this.image = data.image || '';
    this.distance = data.distance || 0;
    this.timeSlots = data.timeSlots || [];
    this.dataSource = data.dataSource || '';
    // available属性初始化为undefined，表示未查询状态
    this.available = data.available !== undefined ? data.available : undefined;
  }
  
  /**
   * 格式化价格
   * @returns {string} 格式化后的价格
   */
  get formattedPrice() {
    return `¥${this.price.toFixed(2)}`;
  }
  
  /**
   * 获取评分文本
   * @returns {string} 评分文本
   */
  get ratingText() {
    return `${this.rating.toFixed(1)}分`;
  }
  
  /**
   * 获取设施文本
   * @returns {string} 设施文本
   */
  get facilitiesText() {
    return this.facilities.join(' | ');
  }
  
  /**
   * 获取空闲时段
   * @returns {Array} 空闲时段数组
   */
  get freeTimeSlots() {
    return this.timeSlots.filter(slot => slot.isFree);
  }
  
  /**
   * 获取忙碌时段
   * @returns {Array} 忙碌时段数组
   */
  get busyTimeSlots() {
    return this.timeSlots.filter(slot => !slot.isFree);
  }
}

/**
 * 数据源模型
 */
export class DataSource {
  constructor(data = {}) {
    this.id = data.id || 0;
    this.name = data.name || '';
    this.url = data.url || '';
    this.enabled = data.enabled !== undefined ? data.enabled : true;
    this.lastUpdated = data.lastUpdated || null;
  }
  
  /**
   * 获取状态文本
   * @returns {string} 状态文本
   */
  get statusText() {
    return this.enabled ? '已启用' : '已禁用';
  }
  
  /**
   * 获取状态颜色
   * @returns {string} 状态颜色
   */
  get statusColor() {
    return this.enabled ? '#4CAF50' : '#9E9E9E';
  }
}

/**
 * 设置模型
 */
export class Settings {
  constructor(data = {}) {
    this.defaultRange = data.defaultRange || 5; // 默认查询范围（公里）
    this.defaultTimePreference = data.defaultTimePreference || 'morning'; // 默认时间偏好
    this.notifications = data.notifications || {
      freeVenueAlert: true, // 场地空闲提醒
      popularVenuePush: false // 热门场地推送
    };
    this.dataSources = data.dataSources || []; // 数据源列表
  }
  
  /**
   * 获取时间偏好文本
   * @returns {string} 时间偏好文本
   */
  get timePreferenceText() {
    const preferences = {
      'morning': '上午',
      'afternoon': '下午',
      'evening': '晚上'
    };
    return preferences[this.defaultTimePreference] || '上午';
  }
}

export default {
  Venue,
  DataSource,
  Settings
};